package com.jy.adscm.zltx.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.jy.adscm.bean.system.JyDept;
import com.jy.adscm.bean.system.JyMenu;
import com.jy.adscm.bean.system.JyUser;
import com.jy.adscm.system.mapper.mysql.JyDeptMapper;
import com.jy.adscm.system.mapper.mysql.JyMenuMapper;
import com.jy.adscm.system.mapper.mysql.JyUserMapper;
import com.jy.adscm.utils.AdscmBaseUtils;
import com.jy.adscm.zltx.bean.SjFile;
import com.jy.adscm.zltx.bean.SjFileUser;
import com.jy.adscm.zltx.bean.SjFileUser;
import com.jy.adscm.zltx.mapper.mysql.SjFileMapper;
import com.jy.adscm.zltx.mapper.mysql.SjFileUserMapper;
import com.jy.adscm.zltx.service.SjFileUserService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.jy.adscm.zltx.service.SjFileUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 人员与三级文件配置器 服务实现类
 * </p>
 *
 * @author yyy
 * @since 2019-04-24
 */
@Service
public class SjFileUserServiceImpl extends ServiceImpl<SjFileUserMapper, SjFileUser> implements SjFileUserService {

    @Autowired
    JyMenuMapper jyMenuMapper;
    @Autowired
    SjFileMapper  sjFileMapper;
    @Autowired
    JyUserMapper jyUserMapper;
   @Autowired
    JyDeptMapper jyDeptMapper;
    @Cacheable(value = "sjFileUserTree")
    @Override
    public List<JyMenu> selectSjFileTree() {
        Wrapper<JyMenu> wrapper=new EntityWrapper<>();
        wrapper.eq("parentId",272);
        List<JyMenu> jyMenus = jyMenuMapper.selectList(wrapper);
        getAllChildren(jyMenus);
        return jyMenus;
    }

    @Override
    public List<JyUser> selectAllUsers() {
       Wrapper<JyUser> jyUserWrapper=new EntityWrapper<>();
       jyUserWrapper.eq("enabled",1);
        List<JyUser> jyUsers = jyUserMapper.selectList(jyUserWrapper);
        for (JyUser jyUser : jyUsers) {
            if (AdscmBaseUtils.getInstance().isNotEmpty(jyUser.getDeptId(),null)){
                JyDept jyDept = jyDeptMapper.selectById(jyUser.getDeptId());
                if (AdscmBaseUtils.getInstance().isNotEmpty(jyDept,null)){
                    jyUser.setDeptName(jyDept.getDeptName());
                }else {
                    jyUser.setDeptName("其他");
                }
                }

        }
        return jyUsers;
    }

    @Override
    public List<JyMenu> selectSjFileTreeByUser(Integer id) {
        List<JyMenu> menus=new ArrayList<>();
        Wrapper<SjFileUser> wrapper=new EntityWrapper<>();
        wrapper.eq("userId",id);
        List<SjFileUser> sjFileUsers = super.selectList(wrapper);
        if (sjFileUsers!=null && sjFileUsers.size()>0){
            for (SjFileUser sjFileUser : sjFileUsers) {
                JyMenu  jyMenu=new JyMenu();
                jyMenu.setParentId(sjFileUser.getParentId());
                jyMenu.setSrcType(2);
                jyMenu.setId(sjFileUser.getFileId());
                SjFile sjFile = sjFileMapper.selectById(sjFileUser.getFileId());
                jyMenu.setName(sjFile.getFileName());
                menus.add(jyMenu);
            }
        }
        return menus;
    }

    public  void getAllChildren(  List<JyMenu> menus) {
        if (menus!=null&&menus.size()>0){
            for (JyMenu menu : menus) {
                Wrapper<JyMenu> wrapper=new EntityWrapper<>();
                wrapper.eq("parentId",menu.getId());
                wrapper.eq("srcType",1);
                List<JyMenu> jyMenus = jyMenuMapper.selectList(wrapper);
                if (jyMenus!=null&&jyMenus.size()>0){
                    getAllChildren(jyMenus);
                    menu.setChildren(jyMenus);
                }else {

                    //最后一级 根据菜单名字查询

                    String name = menu.getName();
                    if ("质量标准".equals(name)){
                        addSjFile(menu,1);
                    }else if ("操作规程".equals(name)){
                        addSjFile(menu,2);
                    }else if ("管理制度".equals(name)){
                        addSjFile(menu,3);
                    }else if ("工艺技术文件".equals(name)){
                        addSjFile(menu,4);
                    }else if ("岗位职责".equals(name)){
                        addSjFile(menu,5);
                    }else if ("技术标准".equals(name)){
                        addSjFile(menu,6);
                    }else if ("SOP".equals(name)){
                        addSjFile(menu,7);
                    }else if ("外来文件".equals(name)){
                        addSjFile(menu,7);
                    }

                }
            }

        }
    }
    public  void  addSjFile(JyMenu menu ,Integer id){
        //先查询父级菜单名
        JyMenu jyMenu = jyMenuMapper.selectById(menu.getParentId());
        String parentName = jyMenu.getName();
        Wrapper<SjFile> wrapper=new EntityWrapper<>();
        wrapper.eq("fileGs",parentName);
        wrapper.eq("fileType",id);
        List<SjFile> sjFiles = sjFileMapper.selectList(wrapper);
        List<JyMenu> children=new ArrayList<>();
        if (sjFiles!=null&&sjFiles.size()>0){
            for (SjFile sjFile : sjFiles) {
                JyMenu sjmenu=new JyMenu();
                sjmenu.setId(sjFile.getFileId());
                sjmenu.setName(sjFile.getFileName());
                sjmenu.setSrcType(2);
                sjmenu.setParentId(menu.getId());
                children.add(sjmenu);
            }
            menu.setChildren(children);

        }
    }

}
